package tests;

import java.io.File;
import java.util.Collections;
import java.util.List;
import java.util.ArrayList;

import core.MainSemantico;
import core.modeling.parser.XMIParserMock;
import core.util.Util;

import junit.framework.TestCase;

public class AnalisadorSemanticoTest extends TestCase {
	private static final String FILE_SEPARATOR = System
			.getProperty("file.separator");

	private static final String TESTS_DIR = System.getProperty("user.dir")
			+ FILE_SEPARATOR + "input" + FILE_SEPARATOR + "semantico";

	private static final String TESTS_ERRORS_DIR = TESTS_DIR + FILE_SEPARATOR
			+ "errors";
	
	private boolean parseRealizado = false;
	
	protected void setUp() throws Exception {
		super.setUp();
		
		if (!parseRealizado) {
			XMIParserMock.getInstance().parse();
			
			parseRealizado = true;
		}
	}

	public void testAll() throws Exception {
		System.out.println("===============================================");
		System.out.println("## TESTE SEMANTICO ESPERANDO QUE NAO OCORRAM ERROS ##");
		
		int contadorDeTestes = 0;
		for (String fileName : Util.getOclFilesInOrder(TESTS_DIR)) {
			try {
				MainSemantico.executeSemanticAnalyzer(TESTS_DIR + FILE_SEPARATOR
							+ fileName);
			} catch (Exception e) {
				e.printStackTrace();

				fail(e.getMessage());
			}
			contadorDeTestes++;
		}

		System.out.println("===============================================");
		System.out.println("Total de arquivos analisados com entradas esperando sucesso = " + contadorDeTestes);
	}

	public void testAllErrors() throws Exception {
		System.out.println("===============================================");
		System.out.println("## TESTE SEMANTICO ESPERANDO ERROS ##");
		
		int contadorDeTestes = 0;
		for (String fileName : Util.getOclFilesInOrder(TESTS_ERRORS_DIR)) {
			try {
				MainSemantico.executeSemanticAnalyzer(TESTS_ERRORS_DIR + FILE_SEPARATOR
							+ fileName);
				fail("Era esperado que acontecesse erro!");
			} catch (Exception e) {
				System.out.println("Erro esperado aconteceu = " + e.getMessage() + "!");
			}
			contadorDeTestes++;
		}

		System.out.println("===============================================");
		System.out.println("Total de arquivos analisados com entradas esperando erros = " + contadorDeTestes);
	}
}
